package com.hmkj.core.service.risk;

import com.hmkj.core.po.commo.Commo;
import com.hmkj.core.po.risk.RiskParam;
import com.hmkj.core.service.base.GenericService;

import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import java.util.List;

/**
 * 风控参数表业务相关Service接口<br>
 *
 * @author eproo
 * @ClassName: RiskParamService
 * @date 2017-11-09 02:38:44
 */
public interface RiskParamService extends GenericService<Integer, RiskParam> {

    /**
     * 风控参数修改
     * @param commo
     * @param riskParam
     * @param type
     * @param value
     */
    void updateRisk(Commo commo, RiskParam riskParam,Integer type, String value);

    /**
     * 获取品种风控参数
     *
     * @param nid     参数标识
     * @param commoId 品种ID
     * @param clazz   返回类型
     * @return
     */
    <T> T getParamValue(String nid, Integer commoId, Class<T> clazz);

    /**
     * 获取品种风控参数
     *
     * @param nid     参数标识
     * @param commoId 品种ID
     * @return
     */
    String getParamValue(String nid, Integer commoId);

    /**
     * 获取品种风控参数_整形列表
     *
     * @param nid     参数标识
     * @param commoId 品种ID
     * @return
     */
    List<Integer> getParam2IntList(String nid, Integer commoId);

    /**
     * 获取期货最新价
     *
     * @param commoId 品种ID
     * @return
     */
    BigDecimal lastPrice(Integer commoId);


    /**
     * 本段持仓截止时间 -- date
     *
     * @param commoId 品种ID
     * @return date
     */
    Date getAutoSettleTime(Integer commoId);

    /**
     * 本段持仓截止时间
     *
     * @param commoId 品种ID
     * @return
     */
    String getAutoSettleTimeStr(Integer commoId);


    /**
     * 判断是否交易时间
     *
     * @param commoId 品种ID
     * @return
     * @throws ParseException
     */
    boolean isTradeTime(Integer commoId);

    /**
     * 判断暂停交易
     *
     * @param commoId 品种ID
     * @return
     * @throws ParseException
     */
    boolean isTradePause(Integer commoId);

    /**
     * 获取当前交易品种合约
     *
     * @param commoId 品种ID
     * @return
     */
    String getContractNo(Integer commoId);

    /**
     * 查询代理商配置的交易综合费，默认风控配置
     *
     * @param commoId 品种ID
     * @param agentId 代理商ID
     * @return
     */
    BigDecimal getFeeByAgent(Integer commoId, Integer agentId);

    /**
     * 判断当前品种是否到达平仓时间
     *
     * @param commoId  品种ID
     * @return
     */
    boolean isAutoCoverTime(Integer commoId);
}
